CPU Sim

CPU Sim is a software development environment for the simulation of simple computers. It was developed by Dale Skrien to help students understand computer architectures. With this application the user is able to simulate new or existing simple CPUs. Users can create new virtual CPUs with custom machine language instructions, which are implemented by a sequence of micro instructions. CPU Sim allows the user to edit and run assembly language programs for the CPU being simulated.

CPU Sim has been programmed using the Java Swing package. This means it's platform independent (runs on every platform that has a Java virtual machine installed).

CPU Sim
Developer(s) Dale Skrien
Stable release 3.6.7
Development status Under continued development
Written in Java
Operating system MS-Windows, Linux, Mac (Cross-platform)
Type IDE
License freeware
Website http://www.cs.colby.edu/djskrien/CPUSim/

Contents

Wombat 1 Sample CPU

A sample computer system, the Wombat 1, is provided with CPU Sim. It has the following registers:

- pc (program counter);

- acc (accumulator);

- ir (instruction register);

- mar (memory address register);

- mdr (memory data register);

- status.

The assembly language of the Wombat 1 computer consists of 12 instructions. Each instruction is stored on 16 bit's, the first 4 are the Opcode and the other 12 are the address field.

Mnemonic Operation code Field length Meaning
stop 0 16 stops the program execution
load 1 4 12 transfers data from memory to the accumulator
store 2 4 12 transfers data from the accumulator to the memory
read 3 4 (12) puts the data from the IO console to the accumulator
write 4 4 (12) sends to the IO console the data from the accumulator
add 5 4 12 add the data from memory to the accumulator and the result is then stored in the accumulator
subtract 6 4 12 subtracts the data from memory from the accumulator and the result is then stored in the accumulator
multiply 7 4 12 multiplies the data from the memory by the accumulator and the result is then stored in the accumulator
divide 8 4 12 divides the data from the memory into the accumulator and the result is then stored in the accumulator
jmpz 9 4 12 jump to address if the accumulator is 0
jmpn A 4 12 jump to address if the accumulator is negative
jmp B 4 12 unconditioned jump to address

Features

CPU Sim has the following features:

Example program for the Wombat 1 CPU

This program reads in integers until a negative integer is read. It then outputs the sum of all the positive integers.

Start:	read		// read n -> acc
	jmpn  Done  	// jump to Done if n < 0.
	add   sum  	// add sum to the acc
	store sum 	// store the new sum
	jump  Start	// go back & read in next number
Done:	load  sum 	// load the final sum
	write 		// write the final sum
	stop  		// stop
 
sum:	.data 2 0	// 2-byte location where sum is stored

The following modification of the program is also used sometimes:

Start:	read		// read n -> acc
	jmpz  Done  	// jump to Done if n is not 0.
	add   sum  	// add sum to the acc
	store sum 	// store the new sum
	jump  Start	// go back & read in next number
Done:	load  sum 	// load the final sum
	write 		// write the final sum
	stop  		// stop
 
sum:	.data 2 0	// 2-byte location where sum is stored

this one can use negative input to subtract, or 0 to break the loop.

Newest Version

The newest version is 3.6.7. This version will run on Java 1.5 or later.

Downloads

CPU Sim is a free application. You can download the latest version from the web address http://www.cs.colby.edu/djskrien/CPUSim/

External links